﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AgileSaude.Entities;
using AgileSaude.Data;
using AgileSaude.Data.Repository;
using FBS.Framework;
using AgileSaude.Business.Validation;

namespace AgileSaude.Business.Process
{
    internal class TipoServicoProcess
    {
        internal Resultado Incluir(TiposervicoEntities pObj)
        {
            Resultado resultado = new Resultado();

            try
            {
                resultado.Sucesso = true;

                if (resultado.Sucesso)
                {
                    tiposervico obj = new tiposervico();
                    Util.CopyPropertyValues(pObj, obj);

                    new tipoServicoRepository().Add(obj);
                }
            }
            catch (Exception ex)
            {
                String mensagem = ex.Message;
                new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "", "Incluir", "TipoServicoProcess");
                resultado.Sucesso = false;
                throw ex;
            }

            return resultado;
        }

        internal Resultado Alterar(TiposervicoEntities pObj)
        {
            Resultado resultado = new Resultado();
            tipoServicoRepository TipoServicoRepository = new tipoServicoRepository();

            try
            {
                tiposervico user = TipoServicoRepository.gettiposervico(pObj.idTipoServico);
                Util.CopyPropertyValues(pObj, user);

                TipoServicoRepository.Update();
                resultado.Sucesso = true;
            }
            catch (Exception ex)
            {
                Util.GravarLog(ex.Message, "AgileSaude");
                resultado.Sucesso = false;
                throw ex;
            }

            return resultado;
        }

        internal TiposervicoEntities GetTipoServico(int pIdTipoServico)
        {
            tiposervico oData = new tipoServicoRepository().gettiposervico(pIdTipoServico);

            if (oData == null)
            {
                return new TiposervicoEntities();
            }
            else
            {
                return GetTipoServico(oData);
            }

        }

        internal TiposervicoEntities GetTipoServico(string pNome)
        {
            tiposervico oData = new tipoServicoRepository().gettiposervico(pNome);

            if (oData != null)
            {
                return GetTipoServico(oData);
            }
            else
            {
                return null;
            }

        }

        private static TiposervicoEntities GetTipoServico(tiposervico oData)
        {
            TiposervicoEntities oEntitie = new TiposervicoEntities();

            Util.CopyPropertyValues(oData, oEntitie);

            return oEntitie;
        }

        internal List<TiposervicoEntities> Listar(TiposervicoEntities pFiltro, ref Resultado resultado)
        {
            List<TiposervicoEntities> lista = new List<TiposervicoEntities>();

            if (pFiltro == null)
            {
                pFiltro = new TiposervicoEntities();
            }

            try
            {
                var tiposervico = from u in new tipoServicoRepository().GetAll()
                             where (string.IsNullOrEmpty(pFiltro.Descricao) || u.Descricao.ToUpper().Contains(pFiltro.Descricao.ToUpper())) &&
                              (pFiltro.idTipoServico == 0 || u.idTipoServico == pFiltro.idTipoServico)
                             select u;

                foreach (tiposervico user in tiposervico)
                {
                    lista.Add(GetTipoServico(user));
                }

                resultado.Sucesso = true;
            }
            catch (Exception ex)
            {
                String mensagem = ex.Message;
                new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "", "Listar", "TipoServicoProcess");
                resultado.Sucesso = false;
            }

            return lista;
        }
    }
}
